﻿<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="View_ViewState_PostBack.aspx.cs" Inherits="AFCEPF.Samples.WebSamples.Concepts.View_ViewState_PostBack" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <style type="text/css">
        .style1
        {
            text-decoration: underline;
        }
    </style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h3>
        Usage du ViewState et du PostBack pour optimisation
    </h3>
    <p>
        On peut utiliser de façon avantageuse le mécanisme de <b>ViewState</b> associé 
        à celui de <b>PostBack</b>, pour n'effectuer les opérations consommatrices 
        de temps qu'au premier chargement de la page (si le scénario est adapté
        bien sûr).
        <br />
        Lors des chargements successifs de la page, on n'aura pas à refaire 
        l'opération consommatrice de temps, car, si on est au sein d'un <b>PostBack</b>,
        le contrôle contenant les données conservera sa (ses) valeur(s).
        <br />
        On identifie si l'on est au sein d'un <b>PostBack</b> dans le code de la page,
        en général dans l'évènement <b>Form_Load</b> à l'aide de la propriété booléenne
        <b>IsPostBack</b> de l'objet <b>Page</b>.
        <br />
        </p>
        <h4 class="style1">Exemple 1 : Usage avec un chargement de Data</h4>
        <br />

         <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
            <table border="1" width="100%">
                <tr>
                    <th>
                        Title
                    </th>
                    <th>
                        Artist
                    </th>
                    <th>
                        Country
                    </th>
                    <th>
                        Company
                    </th>
                    <th>
                        Price
                    </th>
                    <th>
                        Year
                    </th>
                </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <%#Eval("title")%>
                </td>
                <td>
                    <%#Eval("artist")%>
                </td>
                <td>
                    <%#Eval("country")%>
                </td>
                <td>
                    <%#Eval("company")%>
                </td>
                <td>
                    <%#Eval("price")%>
                </td>
                <td>
                    <%#Eval("year")%>
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>

    <br />
    <asp:Button ID="Button1" runat="server" Text="Do PostBack !" Width="152px" />
    <br />

    <br />
    <asp:Label ID="lblPostBackStatus" runat="server" Text="Label" Font-Bold="True"></asp:Label>
    <p>
    Dans cet exemple, On ne charge les données que lors de l'affichage initial
    de la page. Lors du click sur le bouton, un <b>PostBack</b> est déclenché, et 
    les données affichées dans le contrôles sont re-chargées automatiquement à partir du 
        <b>ViewState</b>
    du controle.
    </p>
    <p>
    Le code à consulter est dans l'évènement <b>Form_Load</b> de cette page.
    </p>

    <br />
    <b>Note :</b>  
    <p>
    Essayez maintenant de désactiver la gestion du <b>ViewState</b> du DataRepeater en mettant 
    sa propriété <b>EnableViewState</b> à <i>false</i>, puis, ré-exécutez cette page d'exemple.
    </p>
    <p>
        On constatera que les données ne seront affichées que lors du premier chargement 
    de la page.
    </p>
        

    
</asp:Content>
